Circuit Breaker প্যাটার্ন এর ধারণা এবং Hystrix এর মাধ্যমে বাস্তবায়ন

Spring Cloud Hystrix (Circuit Breaker) - স্প্রিং ক্লাউড (Spring Cloud) - Java Technologies

274

Circuit Breaker প্যাটার্ন একটি ডিজাইন প্যাটার্ন যা সিস্টেমের ফেইলিউর এবং নির্ভরশীল সার্ভিসের ব্যর্থতা থেকে মূল সিস্টেমকে রক্ষা করতে ব্যবহৃত হয়। এটি একটি সুরক্ষা ব্যবস্থা যা নির্ধারণ করে, যখন একটি সার্ভিস বা ডিপেন্ডেন্সি অনেক বার ব্যর্থ হয়, তখন তা কার্যক্ষম না হয়ে যায় এবং সিস্টেমটি বাকি অংশে কার্যক্ষম থাকতে থাকে।

Circuit Breaker মূলত একটি সিস্টেমের মধ্যে সার্ভিসের ব্যর্থতা বা অবস্থা পর্যবেক্ষণ করে এবং কিছু নির্দিষ্ট সময়ের জন্য সেই সার্ভিসের সাথে যোগাযোগ বন্ধ করে দেয়। এটি নির্ভরশীল সার্ভিসের ব্যর্থতা প্রভাবিত না হওয়া নিশ্চিত করে, যার ফলে মূল সিস্টেমটি সার্ভিস ব্যর্থতার কারণে বন্ধ বা ধীরগতির হয়ে পড়বে না।


Circuit Breaker প্যাটার্ন-এর মূল ধারণা

  1. Closed State (বন্ধ অবস্থা):
    • সার্ভিসটি স্বাভাবিকভাবে কাজ করছে এবং সকল রিকোয়েস্ট ঠিকমতো চলছে। এই সময়ে সিস্টেম সার্ভিসকে কল করে।
  2. Open State (খোলা অবস্থা):
    • সার্ভিসটি একাধিক ব্যর্থতার কারণে "খোলা" অবস্থায় চলে আসে এবং নতুন রিকোয়েস্টগুলো ব্লক করা হয়। সার্ভিস পুনরায় চালু হওয়ার জন্য কিছু সময় বা কন্ডিশন পূর্ণ হতে হতে "Closed" অবস্থায় ফিরে আসে।
  3. Half-Open State (আংশিক খোলা অবস্থা):
    • কিছু নির্দিষ্ট সময় পরে সার্ভিসটি আবার পরীক্ষা করা হয়। যদি সফলভাবে কাজ করে, তাহলে সার্ভিসটি আবার "Closed" অবস্থায় ফিরে আসে। তবে ব্যর্থ হলে আবার "Open" অবস্থায় চলে যাবে।

Circuit Breaker একটি মূল প্যাটার্ন হিসেবে ব্যর্থ সার্ভিস থেকে সিস্টেমের আরেকটি অংশকে রক্ষা করতে সাহায্য করে।


Hystrix এর মাধ্যমে Circuit Breaker বাস্তবায়ন

Hystrix হল Netflix-এর তৈরি একটি সার্কিট ব্রেকার লাইব্রেরি যা Spring Cloud-এর সঙ্গে ইন্টিগ্রেটেড হয়ে মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। এটি মাইক্রোসার্ভিসগুলির মধ্যে নির্ভরশীলতার সমস্যা, ব্যর্থতা এবং অপ্রত্যাশিত সার্ভিস ডাউনটাইমের সময় সিস্টেমের স্থিতিশীলতা নিশ্চিত করে। Hystrix সার্ভিসের ফল্ট টলারেন্স ম্যানেজ করে এবং একটি সার্ভিসের ব্যর্থতার কারণে পুরো সিস্টেমের কার্যক্রম থেমে যাওয়া থেকে রক্ষা করে।

Hystrix এর বৈশিষ্ট্য:

  • Circuit Breaker Pattern: সার্ভিসের ব্যর্থতার উপর ভিত্তি করে সার্কিট ব্রেকার চালু বা বন্ধ করে।
  • Fallback Mechanism: সার্ভিসে সমস্যা হলে একটি ফলোব্যাক রেসপন্স প্রদান করে।
  • Request Caching: একাধিক সার্ভিস কলের জন্য ক্যাশিং সমর্থন করে।
  • Bulkhead Isolation: সার্ভিসগুলির মধ্যে সীমিত রিসোর্স ভাগ করে দেয়, যাতে একটি ব্যর্থ সার্ভিস পুরো সিস্টেমকে প্রভাবিত না করে।

Hystrix এর সাথে Circuit Breaker বাস্তবায়ন

Step 1: Maven ডিপেনডেন্সি যোগ করা

pom.xml-এ Hystrix লাইব্রেরি যোগ করুন।

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Cloud Starter Hystrix (Circuit Breaker) -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

    <!-- Spring Boot Starter Actuator for Monitoring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

Step 2: @EnableCircuitBreaker এনোটেশন ব্যবহার করা

Spring Boot অ্যাপ্লিকেশনে @EnableCircuitBreaker এনোটেশন যোগ করুন যাতে Hystrix এর Circuit Breaker কার্যকর হয়।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;

@SpringBootApplication
@EnableCircuitBreaker  // Enable Circuit Breaker for the application
public class HystrixExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixExampleApplication.class, args);
    }
}

Step 3: Hystrix Command তৈরি করা

Hystrix এর মাধ্যমে সার্ভিস কলের জন্য Circuit Breaker তৈরি করতে, @HystrixCommand ব্যবহার করুন। এই অ্যানোটেশনটি সার্ভিস কলকে র‍্যাপ করে, এবং সার্ভিস ব্যর্থ হলে একটি ফলোব্যাক মেথড কল করবে।

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    // Normal service method with Circuit Breaker
    @HystrixCommand(fallbackMethod = "fallbackMethod") // Fallback method when main method fails
    public String callExternalService() {
        // Imagine this is an HTTP call to an external service
        if (Math.random() > 0.5) {
            throw new RuntimeException("External service failure!");
        }
        return "External service response";
    }

    // Fallback method to handle failure
    public String fallbackMethod(Throwable t) {
        return "Fallback response due to failure: " + t.getMessage();
    }
}

Step 4: Controller তৈরি করা

এখন এই সার্ভিসে তৈরি করা HystrixCommand কে একটি REST API এর মাধ্যমে পরীক্ষা করা যায়।

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    private final MyService myService;

    public MyController(MyService myService) {
        this.myService = myService;
    }

    @GetMapping("/call-service")
    public String callService() {
        return myService.callExternalService();
    }
}

Step 5: application.properties কনফিগারেশন

Hystrix এর কনফিগারেশন এবং সার্ভিস রেজিস্ট্রেশন করার জন্য application.properties ফাইলে কিছু সেটিংস যোগ করুন।

# Enable Hystrix Metrics Stream
hystrix.stream.enabled=true

# Hystrix Timeout Configuration (e.g. for fallback)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000

Hystrix Dashboard

Hystrix Dashboard একটি ইউজার ইন্টারফেস সরবরাহ করে যা সার্কিট ব্রেকারের অবস্থা ট্র্যাক করে। এটি সার্ভিসের স্বাস্থ্য, সার্কিট ব্রেকারের স্টেট এবং মেট্রিক্স প্রদর্শন করে।

Hystrix Dashboard ব্যবহার করার জন্য:

  1. spring-boot-starter-actuator ডিপেনডেন্সি যোগ করুন।
  2. @EnableHystrixDashboard এনোটেশন ব্যবহার করুন।
  3. application.properties ফাইলে মেট্রিক্স স্ট্রিম URL কনফিগার করুন।
import org.springframework.boot.actuate.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableHystrixDashboard  // Enable Hystrix Dashboard
public class HystrixDashboardApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixDashboardApplication.class, args);
    }
}

উপসংহার

  • Circuit Breaker প্যাটার্ন মাইক্রোসার্ভিস আর্কিটেকচারে ব্যর্থ সার্ভিস থেকে পুরো সিস্টেমকে রক্ষা করতে ব্যবহৃত হয়।
  • Hystrix সার্ভিসগুলোর ফল্ট টলারেন্স এবং আস্থারযোগ্যতা বাড়াতে ব্যবহৃত হয়। এটি সার্ভিসে ব্যর্থতার সময় একটি Fallback Method কল করে এবং সার্ভিসে সমস্যা থাকলেও পুরো সিস্টেম বন্ধ হওয়ার ঝুঁকি কমায়।
  • Spring Cloud Hystrix ব্যবহার করে মাইক্রোসার্ভিসে সার্কিট ব্রেকার ইমপ্লিমেন্ট করা যায় যা সিস্টেমের স্ট্যাবিলিটি নিশ্চিত করে।
Content added By
Promotion

Are you sure to start over?

Loading...